package org.generic.test04;

import java.util.ArrayList;
import java.util.List;

/**
 * @author CSY
 * @date 2025 - 03 - 16
 */
public class GenericDetail {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<Integer>();
        //泛型的类型参数不能是基本数据类型
//        List<int> list2 = new ArrayList<int>();

        //2、在给泛型指定数据类型后，同样可以传入该类型或者其子类
        Pig<A> aPig = new Pig<A>(new A());
        aPig.f();
        Pig<A> bPig = new Pig<A>(new B());
        bPig.f();

        //3、泛型的使用形式
        ArrayList<Integer> list1 = new ArrayList<Integer>();
        List<Integer> list2 = new ArrayList<Integer>();

        //在实际开发中一般使用简写，因为编译器会进行类型推断传入合适的类型
        ArrayList<Integer> list3 = new ArrayList<>();
        List<Integer> list4 = new ArrayList<>();

        //4、未指定类型泛型默认是Object
        ArrayList arrayList = new ArrayList();
        //等同于
        ArrayList<Object> arrayList2 = new ArrayList<>();

    }
}
class A{}

class B extends A{}

class Pig<E>{
    E e;

    public Pig(E e) {
        this.e = e;
    }

    public void f() {
        System.out.println(e.getClass());
    }
}